package com.zzl.study.demo.tool;

import com.zzl.study.demo.dao.TodoItemRepository;
import com.zzl.study.demo.domain.TodoItem;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.util.CollectionUtils;

import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.List;

/**
 * 待办事项服务
 *
 * @author: zhangzl
 * @date: 2025/10/14 15:18
 * @version: 1.0
 */
@Slf4j
public class TodoItemService {

    @Resource
    private TodoItemRepository todoItemRepository;

    /**
     * 创建待办事项
     *
     * @param todoItem 待办事项
     * @return 创建结果
     */
    @Tool(name = "create_todo_item", description = "创建待办事项")
    public String createTodoItem(@ToolParam(description = "待办事项") TodoItem todoItem) {
        log.debug("接收到创建待办的请求，请求参数: {}", todoItem);
        try {
            LocalDateTime now = LocalDateTime.now();
            todoItem.setCreatedAt(now);
            todoItem.setUpdatedAt(now);
            this.todoItemRepository.save(todoItem);
            return String.format("待办【%s】创建成功!", todoItem.getTitle());
        } catch (Exception e) {
            log.error("创建待办事项失败", e);
            return "创建待办事项失败，请稍后再试!";
        }
    }

    /**
     * 修改待办事项状态
     *
     * @param todoItem 待办事项
     * @return 修改结果
     */
    @Tool(name = "change_todo_item_status", description = "修改待办事项状态")
    public String changeTodoItemStatus(@ToolParam(description = "待办事项") TodoItem todoItem) {
        log.debug("接收到修改待办的请求，请求参数: {}", todoItem);
        try {
            List<TodoItem> todoItemList = this.todoItemRepository.findTodoItemsByTitle(todoItem.getTitle());
            if (CollectionUtils.isEmpty(todoItemList)) {
                return String.format("待办【%s】不存在!", todoItem.getTitle());
            }
            TodoItem item = todoItemList.get(0);
            item.setStatus(todoItem.getStatus());
            item.setUpdatedAt(LocalDateTime.now());
            this.todoItemRepository.save(item);
            return String.format("待办【%s】状态修改成功!", todoItem.getTitle());
        } catch (Exception e) {
            log.error("修改待办事项失败", e);
            return "修改待办事项失败，请稍后再试!";
        }
    }

    /**
     * 查询截止到今天为止的待办事项集合
     *
     * @return 待办事项集合
     */
    @Tool(name = "query_today_todo_items", description = "查询截止到今天为止的待办事项集合")
    public String queryTodayTodoItems() {
        log.debug("接收到查询待办请求");
        try {
            LocalDateTime today = LocalDateTime.now().with(LocalTime.MAX);
            List<TodoItem> todoItemList = this.todoItemRepository.findTodoItemsByDeadlineBefore(today);
            if (CollectionUtils.isEmpty(todoItemList)) {
                return "没有截止到今天为止的待办事项!";
            }
            StringBuilder sb = new StringBuilder();
            sb.append("截止到今天为止的待办事项有： \n");
            for (int count = 1; count <= todoItemList.size(); count++) {
                TodoItem todoItem = todoItemList.get(count - 1);
                sb.append(todoItem.formatString(count)).append("\n");
            }
            return sb.toString();
        } catch (Exception e) {
            log.error("查询待办事项失败", e);
            return "查询待办事项失败，请稍后再试!";
        }
    }

}
